package response

import (
	"github.com/gogf/gf/container/garray"
	"github.com/gogf/gf/net/ghttp"
)

//选择器数据结构
type LabelValue struct {
	Label string      `json:"label"`
	Value interface{} `json:"value"`
}

//JsonResponse 数据返回通用JSON数据结构
type JsonResponse struct {
	Code int         `json:"code"` // 错误码((0:成功, 1:失败, >1:错误码))
	Msg  string      `json:"msg"`  // 提示信息
	Data interface{} `json:"data"` // 返回数据(业务接口定义具体数据结构)
}

//JsonList 列表JSON数据结构
type JsonList struct {
	Code  int         `json:"code"`  // 错误码((0:成功, 1:失败, >1:错误码))
	Msg   string      `json:"msg"`   // 提示信息
	Count int         `json:"count"` // 总数
	Data  interface{} `json:"data"`  // 返回数据(业务接口定义具体数据结构)
}

//Json 返回json格式
func Json(r *ghttp.Request, code int, message string, data interface{}) {
	_ = r.Response.WriteJson(JsonResponse{
		Code: code,
		Msg:  message,
		Data: func() interface{} {
			if data == nil {
				return ""
			}
			return data
		}(),
	})
}

//JsonExit 返回JSON数据并退出当前HTTP执行函数。
func JsonExit(r *ghttp.Request, code int, msg string, data interface{}) {
	Json(r, code, msg, data)
	r.Exit()
}

//Error 返回错误结构
func Error(r *ghttp.Request, message string, data interface{}) {
	JsonExit(r, 1, message, data)
}

//Success 返回成功
func Success(r *ghttp.Request, message string, data interface{}) {
	JsonExit(r, 0, message, data)
}

//SuccessList 返回列表
func SuccessList(r *ghttp.Request, count int, data interface{}) {
	_ = r.Response.WriteJsonExit(&JsonList{
		Code:  0,
		Msg:   "success",
		Count: count,
		Data:  func() interface{} {
			if data == nil {
				return garray.New()
			}
			return data
		}(),
	})
}

//StatusCode 返回状态码
func StatusCode(r *ghttp.Request, status int, message string) {
	r.Response.Status = status
	r.Response.WritelnExit(message)
}
